/*
 * @Author: ZLY
 * @Date: 2021-12-09 16:37:55
 * @LastEditTime: 2021-12-09 16:37:55
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \web-vue\src\Utils\request.js
 */
import axios from 'axios'
import { MessageBox } from 'element-ui'
import store from '@/store'
import router from '@/router'

// 创建一个axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, //跨域请求时发送cookies
  timeout: 30000 // request timeout
})

// request interceptor请求拦截器
service.interceptors.request.use(
  config => {
    // 在发出请求前做点什么
    if (store.getters.token) {
      // 每个请求都携带 token
      // ['x-token']是自定义头密钥
      // 请根据实际情况修改
      config.headers['X-Token'] = store.getters.token
    }
    return config
  },
  error => {
    // 处理请求错误
    console.log(error)
    return Promise.reject(error)
  }
)

// response interceptor响应拦截器
service.interceptors.response.use(
  /**
   * 如果您想要获取诸如头或状态之类的http信息
   * 请返回response=>response
   */
  /**
   *通过自定义代码确定请求状态
   * 这里只是一个例子
   * 您还可以通过http状态代码判断状态
   */
  response => {
    const res = response.data
    // 如果自定义state不是true，则判断为错误。
    if (res.state) {
      return res
    } else {
      // 状态码如下 将清空token 重新登录
      if (res.code === 50000 && router.currentRoute.path !== '/login') {
        console.log('router', router, router.currentRoute.path)
        MessageBox.confirm('您已注销，您可以取消停留在此页，或重新登录', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(async () => {
          store.dispatch('tagsView/delAllViews', null, { root: true })
          await store.dispatch('user/logout', false)
          router.replace({
            path: '/login'
          })
          return Promise.reject()
        })
      } else {
        return Promise.reject(Array.isArray(res.message) ? res.message[0] : res.message)
      }
    }
  },
  error => {
    console.log('err' + error)
    return Promise.reject('请求失败，状态代码500！')
  }
)

export default service
